import config from '@/config'
import {
  get, post
} from '@/http/api'
/**
 * 调用微信登录
 */
function loginByWeixin () {
  let code = null
  return new Promise(function (resolve, reject) {
    return util
      .login()
      .then(res => {
        code = res.code
        return util.getUserInfo()
      })
      .then(userInfo => {
        // 把用户信息传给后台，存入数据库，并计算一个token给前台存起来
        util
          .request(
            config.host + '/AuthLoginByWeixin', {
              code: code,
              userInfo: userInfo
            },
            'POST'
          )
          .then(res => {
            if (res.errno === 0) {
              // 存储用户信息
              wx.setStorageSync('userInfo', res.data.userInfo)
              wx.setStorageSync('token', res.data.token)

              resolve(res)
            } else {
              reject(res)
            }
          })
          .catch(err => {
            reject(err)
          })
      })
      .catch(err => {
        reject(err)
      })
  })
}
/**
 * 判断用户是否登录
 */
function checkLogin () {
  return new Promise(function (resolve, reject) {
    if (wx.getStorageSync('userInfo') && wx.getStorageSync('token')) {
      wx.checkSession({
        success: function () {
          resolve(true)
        },
        fail: function () {
          reject(false)
        }
      })
    } else {
      reject(false)
    }
  })
}
const getUserInfo = () => new Promise((resolve, reject) => {
  wx.getSetting({
    success: function (res) {
      if (res.authSetting['scope.userInfo']) {
        // 已经授权，可以直接调用 getUserInfo 获取头像昵称
        wx.getUserInfo({
          withCredentials: true,
          success: function (res) {
            // console.log('获取用户信息成功', res)
            resolve(res)
          },
          fail: function (err) {
            console.log('获取用户信息失败', err)
            reject(err)
          }
        })
      } else { // 没有授权
        // console.log('但获取用户信息失败，未同意button授权');
      }
    }
  })
})
const login = () => new Promise((resolve, reject) => {
  getUserInfo().then(async userInfo => {
    // util.request(config.host + "/api/wxapp/UpDataUserInfo", {
    //   rawData: userInfo.rawData,
    //   signature: userInfo.signature,
    //   encryptedData: userInfo.encryptedData,
    //   iv: userInfo.iv
    // }, "POST").then(res => {
    //   if (res.errno === 0) {
    //     // 存储用户信息
    //     wx.setStorageSync("userInfo", res.data.userInfo)

    //     resolve(res)
    //   } else {
    //     reject(res)
    //   }
    // }).catch(err => {
    //   reject(err)
    // })

    const userData = await upuserinfo({
      rawData: userInfo.rawData,
      signature: userInfo.signature,
      encryptedData: userInfo.encryptedData,
      iv: userInfo.iv
    })
    if (userData.statusCode === 200) {
      wx.setStorageSync('userInfo', userInfo.userInfo)

      resolve(userInfo.userInfo)
    } else {
      reject()
    }
  }).catch(err => {
    reject(err)
  })
})
const upuserinfo = params => {
  return post('/api/wxapp/UpDataUserInfo', params)
}
const user = {
  login,
  loginByWeixin,
  checkLogin
}

export default user
